home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Source Code / C++ / Applications / Nuntius 1.2 / src / Nuntius / UTriangleControl.cp < prev    next >
Encoding:
Text File  |  1994-02-20  |  2.0 KB  |  98 lines  |  [TEXT/MPS ]

  1. // Copyright Â© 1992 Peter Speck, speck@dat.ruc.dk. All rights reserved.
  2. // UTriangleControl.cp
  3.  
  4. #include "UTriangleControl.h"
  5. #include "ViewTools.h"
  6.  
  7. #include <RsrcGlobals.h>
  8.  
  9. #pragma segment MyViewTools
  10.  
  11. TTriangleControl::TTriangleControl()
  12. {
  13. }
  14.  
  15. pascal void TTriangleControl::Initialize()
  16. {
  17.     inherited::Initialize();
  18.     fIsExpanded = false;
  19. }
  20.  
  21. void TTriangleControl::ITriangleControl(TView *superView, VPoint location, Boolean expanded)
  22. {
  23.     IControl(superView, location, VPoint(16, 16), sizeFixed, sizeFixed);
  24.     fIsExpanded = expanded;
  25. }
  26.  
  27. pascal void TTriangleControl::Free()
  28. {
  29.     inherited::Free();
  30. }
  31.  
  32. pascal void TTriangleControl::Hilite()
  33. {
  34.     Draw(VRect());
  35. }
  36.  
  37. pascal void TTriangleControl::Draw(const VRect& /* area */)
  38. {
  39.     short transformCode = (fHilite ? ttSelected : ttNone);
  40.     short rsrcID = (fIsExpanded ? kExpandedDiamondSicn : kNonExpandedDiamondSicn);
  41.     CRect r(0, 0, 16, 16);
  42.     PlotIconID(r, 0, transformCode, rsrcID);
  43. }
  44.  
  45. Boolean TTriangleControl::IsExpanded()
  46. {
  47.     return fIsExpanded;
  48. }
  49.  
  50. void TTriangleControl::SetExpand(Boolean expand)
  51. {
  52.     if (fIsExpanded == expand)
  53.         return;
  54.     fIsExpanded = expand;
  55.     Focus();
  56.     ForceRedraw();
  57. }
  58.  
  59. pascal void TTriangleControl::TrackMouse(TrackPhase aTrackPhase,
  60.                                    VPoint& /* anchorPoint */, VPoint& /* previousPoint */,
  61.                                      VPoint& nextPoint, Boolean /* mouseDidMove */)
  62. {
  63.  
  64.     switch (aTrackPhase)
  65.     {
  66.         case trackBegin:
  67.             HiliteState(true, kRedraw);
  68.             break;
  69.  
  70.         case trackContinue:
  71.             HiliteState(ContainsMouse(nextPoint), kRedraw);
  72.             break;
  73.  
  74.         case trackEnd:
  75.             HiliteState(false, kRedraw);
  76.             if (ContainsMouse(nextPoint))
  77.             {
  78.                 DoAnimation();
  79.                 fIsExpanded = !fIsExpanded;
  80.                 fSuperView->HandleEvent(mToggle, this, nil);
  81.             }
  82.             break;
  83.     }
  84. }
  85.  
  86.  
  87. void TTriangleControl::DoAnimation()
  88. {
  89.     CRect r(0, 0, 16, 16);
  90.     EraseRect(r);
  91.     PlotIconID(r, 0, ttSelected, kHalfExpandedDiamondSicn);
  92.     long dl;
  93.     Delay(2, dl); // from hacking Finderâ„¢
  94.     fIsExpanded = !fIsExpanded;
  95.     short rsrcID = (fIsExpanded ? kExpandedDiamondSicn : kNonExpandedDiamondSicn);
  96.     EraseRect(r);
  97.     PlotIconID(r, 0, ttSelected, rsrcID);
  98. }